iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0
自我挑戰組

2023年度學習分享系列 第 22

設計Domain層

  • 分享至 

  • xImage
  •  

文章未來將更新於:
https://kevinyay945.com/golang-project-design/anki-support/design-domain-layer/

在先前的規劃中,可以發現,我們主體都是圍繞在Anki的上打轉
因此,這次的domain中,會有三個domain,分別是

Anki

Ankier

  1. 用牌組名稱抓取卡片
  2. 用id來抓取卡片
  3. 抓取代處理的卡片
  4. 將卡片進行更新

另外,關於回傳的卡片,我也可以想像他有以下功能

Note

  1. 檢查指定欄位是否產生了聲音
  2. 檢查指定欄位是否有值了
  3. 取得指定欄位的輸出(把一些不相干的內容移除,例如[[Japanese Pitch Accent]]的讀音標記)

GPT

MakeSentencer

  1. 放入單字跟依賴的字典,輸出需要的造句,以及相關的片假名及中文

TextToSpeech

Sounder

  1. 將傳入的文字轉換成語音,並回傳檔案位置

目前規劃可以想像到的應該就屬這些部分了

在Domain層的規劃,主要的邏輯會是一個domain做一件事,另外,如果他有回傳的物件,那這個物件上面掛的method不能有依賴別人的內容,如果有需要依賴的話就要與原domain層的interface進行互動

例如:

ankier := &Anki{}
note := &AnkierNote{}

err := note.Save() // 👎

err := ankier.Save(note) // 👍

會這麼設計,主要是因為在domain原本的struct中,會注入各式各樣的infrastructure,但透過這些domain層所產出的struct內基本上都是純粹的資料格式,所以不會希望也把一些對外互動的infrastructure也放到這個struct中,這樣會讓整體規劃上變的更加的複雜


上一篇
優化Anki infrastructure
下一篇
實做Domain功能-Anki
系列文
2023年度學習分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言